package org.quincy.netty.test.processor;

import org.quincy.netty.test.comm.Terminal;
import org.quincy.netty.test.vo.LoginMessage;
import org.quincy.netty.test.vo.LoginResultMessage;
import org.quincy.rock.comm.MessageSender;
import org.quincy.rock.comm.netty.parser.NettyCasingResultMessage;
import org.quincy.rock.core.function.Consumer;
import org.quincy.rock.core.util.CoreUtil;

/**
 * <b>登录处理器。</b>
 * <p><b>详细说明：</b></p>
 * <!-- 在此添加详细说明 -->
 * 无。
 * <p><b>修改列表：</b></p>
 * <table width="100%" cellSpacing=1 cellPadding=3 border=1>
 * <tr bgcolor="#CCCCFF"><td>序号</td><td>作者</td><td>修改日期</td><td>修改内容</td></tr>
 * <!-- 在此添加修改列表，参考第一行内容 -->
 * <tr><td>1</td><td>wks</td><td>2018年6月21日 下午11:05:52</td><td>建立类型</td></tr>
 * 
 * </table>
 * @version 1.0
 * @author wks
 * @since 1.0
 */
public class MessageProcessor10001 extends MessageProcessor<LoginMessage> {

	/** 
	 * process。
	 * @see org.quincy.mqtt.test.processor.MessageProcessor#process(org.quincy.rock.comm.MessageSender, org.quincy.mqtt.test.comm.Terminal, java.lang.Object, java.lang.Object)
	 */
	@Override
	protected void process(MessageSender<Integer> sender, Terminal terminal, Object msgId, LoginMessage content) {
		NettyCasingResultMessage<LoginResultMessage> result = new NettyCasingResultMessage<>(true);
		LoginResultMessage data = new LoginResultMessage();
		data.setServerTime(System.currentTimeMillis());
		data.setServerNo("svr_123456");
		result.setData(data);
		Consumer<Boolean> callback;
		if ("admin".equals(content.getUserName()) && "123456".equals(content.getPassword())) {
			result.setResult(1);
			callback = new Consumer<Boolean>() {

				@Override
				public void call(Boolean t) {
					StringBuilder sb = new StringBuilder();
					sb.append("(");
					sb.append(msgId);
					sb.append(")终端登录.");
					getAddToList().addToReceiveList(CoreUtil.toString(terminal), sb.toString());
				}
			};
		} else {
			result.setResult(2);
			callback = new Consumer<Boolean>() {

				@Override
				public void call(Boolean t) {
					sender.offlineTerminal(terminal);
				}
			};
		}
		sender.sendMessage(terminal, msgId, getResponeCode(), result, null, true, callback);
	}
}
